{extend name="layout" /}

{block name="title"}
<title>过滤器 数据筛选 - thinkPHP极速后台开发</title>
<meta name="title" content="过滤器 数据筛选 - thinkPHP极速后台开发">
<meta name="keywords" content="过滤器 数据筛选,php,后台开发包，thinkphp、easyadmin、admin,easy,thinkeasyadmin">
<meta name="description" content="配置过滤器,快速筛选列表页面的数据;easyadmin灵活可定制的thinkphp的后台开发工具包,助你快速开发后台">
{/block}
{block name="main"}


<fieldset id="join" class="layui-elem-field">
    <legend>join 关联查询</legend>
    <div class="layui-field-box">
        <p>关联查询需要<code>configListField</code>方法和<code>configListJoin</code>方法结合使用</p>
        <pre class="php">
#project\app\admin\controller\Category.php

namespace app\admin\controller;

use easyadmin\app\columns\lists\ListDateTime;
use easyadmin\app\columns\lists\ListImage;
use easyadmin\app\columns\lists\ListText;
use easyadmin\app\libs\ListField;
use easyadmin\app\libs\Page;
use think\db\Query;

class Category extends \easyadmin\controller\Admin
{
    protected $pageName = '分类';

    /**
     * 配置列表字段
     * @param ListField $list
     */
    protected function configListField(ListField $list)
    {
        $list
            ->addField('id', 'ID', ListText::class)
            //关联字段;关联字段需要写上别名.  c 就是 join 指定的别名;
            ->addField('c.name', '上级分类名称', ListText::class)
            ->addField('name', '分类名称', ListText::class)
            ->addField('icon', '图标', ListImage::class)
            ->addField('time', '创建时间', ListDateTime::class);
    }

    /**
     * 配置关联查询
     * @param Query $query  thinkphp 的 query, 可使用 thinkphp 的数据库查询方法, 这里主要是join 关联数据表
     * @param string $alias 查询主表的别名
     */
    protected function configListJoin(Page $page, Query $query, string $alias)
    {
        //这里就是 thinkphp 的join用法, 详细可参考 thinkphp 的文档
        $query->join('category c','c.id='. $alias .'.parent_id');
    }

}

</pre>
        <p>如果列表中需要展示关联表中的字段, 需要在<code>configListField</code>方法中<code>addField</code>时写上关联表的别名:</p>
        <pre class="php">
#project\app\admin\controller\Category.php

protected function configListField(ListField $list)
{
    //关联字段需要写上别名.  c 就是 join 指定的别名;
    $list->addField('c.name', '上级分类名称', ListText::class);
}

</pre>
        <img src="/doc_img/join.png" alt="join关联">
    </div>
</fieldset>

{/block}


